<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    function fun(a,b) {
      // console.log(arguments);
      console.log(this);
      console.log(a+b);
    }
    fun(1,3);

    // call方法
    // 一.功能 1.改变this指向 2.执行参数并传参
    // 二.参数   1.指定this的指向对象 2.第二个及后面为参数列表
    // 三.返回值 自己函数的返回值
    // 四.测试
      var o = {name:"zas"};
      // fun.call(o,1,5);

     // apply
    // 一.功能 1.改变this指向 2.执行参数并传参
    // 二.参数   1.指定this的指向对象 2.第二参数为数组
    // 三.返回值 自己函数的返回值
    // 四.测试
      // fun.apply(o,[5,5,5,6])

    // bind
    // 一.功能 1.改变this指向 2.不立即执行参数，但是可以传参
    // 二.参数   1.指定this的指向对象 2.第二参数及以后为参数列表
    // 三.返回值 指定this的函数，也叫绑定函数
    // 四.测试
      // var fn =  fun.bind(o,5,6);
      // fn(4,6);
      // fun();

    // 第一个参数为null或者undelfind的时候，this指向的是window
    fun.call(null,5,3);


    // 练习
    var ol = {
      0:1,
      1:2,
      2:3,
      length : 3
    }
    console.log(ol);

    // 增加一项值
      // ol[3] = 4;
      // ol[length] = 4;
      // console.log(ol);

      // var arr =  [1,2,3];
      // arr.push(5);
      // console.log(arr);
   // 增加一项值
    Array.prototype.push.call(ol,4);
    console.log(ol);

    var arr =  [1,2,3,5,6];
    // 求最大值
    var max1 = Math.max.apply(null,arr)
    console.log(max1);
    console.log(arr);

    // 
    console.log.apply(null,arr);


    // 练习
    // var name = "nm";
    // var bbo = {
    //   name : "hk",
    //   aihao : function () {
    //     fun();
    //     console.log(3);
    //     console.log(this.name);
    //     setInterval(function () {
    //       console.log(this.name);
    //     },1000)
    //   },
    // }
    // bbo.aihao()
      // 让this.name=hk
      // var name = "nm";
      // var bbo = {
      //   name : "hk",
      //   aihao : function () {
      //     console.log(3);
      //     console.log(this.name);
      //     setInterval(function () {
      //       console.log(this.name);
      //     }.bind(this),1000)
      //   },
      // }
      // bbo.aihao()
      // // 方法2
      // var name = "nm";
      // var bbo = {
      //   name : "hk",
      //   aihao : function () {
      //     console.log(3);
      //     console.log(this.name);
      //     var th = this
      //     setInterval(function () {
      //       console.log(th.name);
      //     },1000)
      //   },
      // }
      // bbo.aihao()

      document.onclick = function () {
        console.log(this);
      }.bind(ol)
  </script>
</body>
</html>